package blog;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

//完整实现用户注册的功能
public class UserRegisterAction implements Action {
    @Override
    public void run() {
        String sql = "insert into users(username,nickname,password) values (?, ?, ?)";
        //1、提示用户需要的信息，并且使用jdbc执行sql
        System.out.print("开始用户注册>");
        System.out.println();

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名称(不支持中文)>");
        String username = scanner.nextLine();
        System.out.print("请输入用户昵称(不支持中文)>");
        String nickname = scanner.nextLine();
        System.out.print("请输入密码>");
        String password = scanner.nextLine();

        try (Connection connection = DBUtil.getConnection()) {
            try (PreparedStatement preparedStatement = connection.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) {
                preparedStatement.setString(1, username);
                preparedStatement.setString(2, nickname);
                preparedStatement.setString(3, password);

                preparedStatement.executeUpdate();

                int id;
                try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
                    resultSet.next();
                    id = resultSet.getInt(1);
                }

                System.out.println("注册成功，欢迎您的加入 " + nickname);

                //是否应该让刚注册的用户自动登录成功呢？还是让用户再登录一次？
                //两种方案都可以，我们选择让刚注册的用户自动登录
                User user = new User();
                //刚注册完成要登录，所以需要id信息
                //用户的id来自于自增主键id，插入之前我们并不知道，本次插入成功后，id为多少。
                //所以，我们需要通过sql获取插入成功后的id信息。
                //使用PreparedStatement.RETURN_GENERATED_KEYS获取自增主键，用 preparedStatement.getGeneratedKeys()接受
                user.id = id;
                user.nickname = nickname;
                user.username = username;
                User.login(user);
            }
        } catch (SQLException e) {
            System.out.println("错误:" + e.getMessage());
        }
    }
}
